<?php

namespace services\sys;

use api\modules\common\services\UploadService;
use common\components\Service;
use common\models\sys\SysFile;
use Yii;


/**
 * Class SysFileService
 * @package common\services\sys
 */
class SysFileService extends Service
{
    /**
     * 查询文件
     * @param string $site
     * @param string $module
     * @param string $file
     * @return SysFile|null
     */
    public static function getSysFile(string $site, string $module, string $file): ?SysFile
    {
        return SysFile::findOne([
            'site' => $site,
            'module' => $module,
            'file' => $file,
        ]);
    }

    /**
     * 更新文件
     * @param string $site
     * @param string $module
     * @param string|array $newFile
     * @param string|array|null $oldFile
     * @return void
     * @throws \Exception
     */
    public static function editFile(string $site, string $module, $newFile, $oldFile = null): void
    {
        if (is_string($newFile) && is_string($oldFile) && $newFile == $oldFile) {
            return;
        }
        if ($newFile) {
            UploadService::move([
                'site' => $site,
                'module' => $module,
                'file' => is_array($newFile) ? $newFile : [$newFile],
            ]);
        }
        if ($oldFile) {
            UploadService::delete([
                'site' => $site,
                'module' => $module,
                'file' => is_array($oldFile) ? $oldFile : [$oldFile],
            ]);
        }
    }

    /**
     * 更新本地文件
     * @param string $site
     * @param string $module
     * @param string|array $newFile
     * @param string|array|null $oldFile
     * @return SysFile[]
     * @throws \Exception
     */
    public static function editLocalFile(string $site, string $module, $newFile, $oldFile = null): array
    {
        if (is_string($newFile) && is_string($oldFile) && $newFile == $oldFile) {
            return [];
        }
        $resFile = [];
        if ($newFile) {
            $resFile = UploadService::moveLocalFile([
                'site' => $site,
                'module' => $module,
                'file' => is_array($newFile) ? $newFile : [$newFile],
            ]);
        }
        if ($oldFile) {
            UploadService::delete([
                'site' => $site,
                'module' => $module,
                'file' => is_array($oldFile) ? $oldFile : [$oldFile],
            ]);
        }
        return $resFile;
    }

    /**
     * 修复缩略图
     * @return void
     */
    public static function repairData()
    {
        /**
         * @var SysFile[] $sysFileList
         */
        $site = SysFile::SITE_TOOL;
        $module = SysFile::MODULE_TOOL_IMAGE;
        $sysFileList = SysFile::find()
            ->where([
                'site' => $site,
                'module' => $module,
                'min_file' => '',
                'status' => SysFile::STATUS_FORMAL,
            ])
            ->orderBy(['id' => SORT_ASC])
            ->all();
        foreach ($sysFileList as $sysFile) {
            $minFile = UploadService::getMinFile($sysFile->file);
            $fileDir = UploadService::getDir($site, $module, $sysFile->file, SysFile::STATUS_FORMAL);
            // 生成缩略图
            UploadService::imageEqualResize($fileDir.$sysFile->file, 500, 500, $fileDir.$minFile);
            // 保存文件
            $sysFile->min_file = $minFile;
            $sysFile->saveAndCheckResult();

            echo "文件ID：{$sysFile->id} ======= 缩略图：{$minFile}".PHP_EOL;
        }
    }
}